#ifndef _NODO
#define _NODO

#include <vector>
#include <algorithm>

using namespace std;

class Nodo{
        
    private:
        
        //Identificador del nodo
        int id;
        
        //Cantidad de colores distintos de los nodos adyacentes
        int saturacion;
        
        //Color asociado al nodo, -1 si no se le ha asignado ninguno
        int color;
        
        //Vector que contiene los id de los nodos adyacentes
        vector<Nodo*> adyacentes;

        
    public:

        /*
         * Grado del nodo. Este atributo es público de forma que se pueda
         * aplicar ordenamiento sobre el mismo
         */
        int grado;
        
        /* Constructor vac�o para inicializaci�n de arreglo de grafo
         */
        Nodo();

        /*
         * Constructor de la clase. Crea un nodo con el id indicado, color -1 y
         * listas de padres e hijos vacia
         */
        Nodo(int id);

        void inicializar();
        
        /*
         * Retorna un vector que contiene a todos los adyacentes del nodo
         */
        vector<Nodo*> getAdyacentes();
        
        /*
         * Agrega un hijo a la lista de hijos del nodo
         */
        void agregarAdyacente(Nodo *a);

        /*
         * Ordena los nodos adyacentes en el arreglo
         */
        void sortAdyacentes();

        /*
         * Retorna el id asociado al nodo
         */
        int getId();
        
        /*
         * Asigna al id del nodo el valor indicado
         */
        void setId(int i);
        
        /*
         * Retorna el color asignado al nodo
         */
        int getColor();
                
        /*
         * Asigna al nodo el color indicado
         */
        void setColor(int c);

        int getSaturacion();

        void setSaturacion(int saturacion);
};

#endif